# 字符串回文判断

# 题目内容

给定一个仅由小写英文字母组成的字符串 $s$,请判断它是否可以在删除一个字符之后,变成一个回文串。回文串的定义是:从左到右读和从右到左读完全相同。如果可以,输出一个数组,数组由可删除字符的索引值构成;否则输出一个空数组。

# 输入描述

输入一个字符串 $s$,$2 \le s.length \le 10^5$。

# 输出描述

输出一个数组,内容为:$N$ 种删除方法的字符索引值。如输入为:abca,则输出为:[1, 2],代表可以有两种删除方式:[aba, aca]。

  • 1:删除索引值为 1 的字符,即删除字符 b,则变为:aca,属于回文
  • 2:删除索引值为 2 的字符,即删除字符 c,则变为:aba,属于回文

# 样例

# 样例 1

输入

abca
1

输出

1,2
1

说明: 删除 b 或删除 c 后,都可以变成回文串。

# 样例 2

输入

abcd
1

输出


1

说明: 无论删除哪个字符,都无法变成回文串。

# 代码

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});

rl.on('line', (input) => {
    const arr = input.split('');
    let left = 0;
    let right = input.length - 1;
    const ans = [];
    if (arr.length === 2) {
        console.log('0,1');
    }
    while (left < right) {
        if (input[left] === input[right]) {
            left++;
            right--;
        } else if (input[left+1] === input[right]) {
            ans.push(left);
            if (left+1 === right) {
                ans.push(right);
            }
            left++;
        } else if (input[left] === input[right-1]) {
            ans.push(right);
            if (left === right-1) {
                ans.push(left);
            }
            right--;
        }
    }
    console.log(ans.join(','));
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34